﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//class A 
//{
//public:
//    virtual void func1() { cout << "A::func1" << endl; }
//    virtual void func2() { cout << "A::func2" << endl; }
//    int _a = 1;
//};
//class B :public A
//{
//public:
//    virtual void func1() { cout << "B::func1" << endl; }
//    virtual void func3() { cout << "B::func1" << endl; }
//    
//    int _b = 2;
//};
//class C :public B
//{
//public:
//    virtual void func1() { cout << "C::func1" << endl; }
//    virtual void func3() { cout << "C::func1" << endl; }
//
//    int _b = 2;
//};
//int main() 
//{
//    A a;
//    B b;
//    C c;
//    cout << sizeof(a) << endl;  // 输出8(32位)或16(64位)
//    return 0;
//}
class Person {
public:
	virtual void BuyTicket() { cout << "买票-全价" << endl; }
	string _name;
};
class Student : public Person {
public:
	virtual void BuyTicket() { cout << "买票-打折" << endl; }
	virtual void func1() { cout << "1111" << endl; }
	string _id;
};
class Soldier : public Person {
public:
	virtual void BuyTicket() { cout << "买票-优先" << endl; }
	string _codename;
};
void Func(Person* ptr)
{
	// 这⾥可以看到虽然都是Person指针Ptr在调⽤BuyTicket 
	// 但是跟ptr没关系，⽽是由ptr指向的对象决定的。 
	ptr->BuyTicket();
}
int main()
{
	// 其次多态不仅仅发⽣在派⽣类对象之间，多个派⽣类继承基类，重写虚函数后 
	// 多态也会发⽣在多个派⽣类之间。 
	Person ps;
	Student st;
	Soldier sr;
    Func(&ps);
	Func(&st);
	Func(&sr);
	cout<<sizeof(st.func1())
	return 0;
}
